Học cách tạo trò chơi trắc nghiệm ôn tập — lưu hàng chục câu hỏi trong danh sách, chấm điểm tự động và báo kết quả cuối bài.
Quiz trong Scratch là gì?
Quiz (trắc nghiệm) là chương trình đặt câu hỏi, nhận câu trả lời của người dùng, rồi chấm đúng/sai và tính điểm. Trên Scratch, bạn có thể làm quiz Toán, Tiếng Anh, Tin học, Lịch sử… phục vụ ôn tập lớp hoặc chia sẻ với bạn bè.
Quiz kết hợp danh sách, biến, khối hỏi đáp và điều kiện — bài tập ứng dụng thực tế cho học sinh THCS
Ngân hàng câu hỏi
Kho câu hỏi và đáp án lưu tập trung
Chấm tự động
So sánh trả lời với đáp án đúng
Thống kê
Điểm, tỷ lệ đúng, thời gian làm bài
💡 Ghi nhớ
Ngân hàng câu hỏi (question bank) là nơi bạn lưu toàn bộ câu hỏi — thêm câu mới chỉ cần bổ sung vào kho, không phải viết lại cả chương trình.
Thiết kế ngân hàng câu hỏi bằng danh sách
Cách phổ biến nhất: dùng hai danh sách song song — mỗi vị trí trong list câu hỏi khớp với cùng vị trí trong list đáp án.
Vị trí
List cau_hoi
List dap_an
1
Thủ đô Việt Nam là?
Hà Nội
2
2 + 2 = ?
4
3
Scratch do ai phát triển?
MIT
Tạo list bằng Make a List — nhập câu hỏi trực tiếp hoặc thêm bằng khối lệnh
Nạp dữ liệu khi khởi động
khi nhấn cờ xanh xóa tất cả của [cau_hoi v] xóa tất cả của [dap_an v] thêm [Thủ đô VN là?] vào [cau_hoi v] thêm [Hà Nội] vào [dap_an v] thêm [2+2=?] vào [cau_hoi v] thêm [4] vào [dap_an v]
Hoặc gõ sẵn câu hỏi vào list khi soạn thảo — script chỉ cần xóa tất cả rồi nạp lại nếu muốn reset mỗi lần chạy.
⚠️ Quan trọng
Hai list phải cùng số mục và đúng thứ tự. Câu hỏi thứ 3 luôn đi với đáp án thứ 3 — nếu lệch, chấm điểm sẽ sai.
Biến điều khiển quiz
Ngoài list, cần vài biến theo dõi tiến trình:
diem — số câu trả lời đúng.
so_cau — chỉ số câu hiện tại (bắt đầu từ 1).
tong_cau — tổng số câu (= độ dài của list câu hỏi).
khi nhấn cờ xanh đặt [diem v] thành [0] đặt [so_cau v] thành [1] đặt [tong_cau v] thành (độ dài của [cau_hoi v]) hiện biến [diem v]
Đặt câu hỏi và nhận câu trả lời
Khối hỏi … và đợi (Sensing) hiện ô nhập liệu; giá trị người dùng gõ nằm trong khối reporter trả lời.
Khối "hỏi và đợi" cùng reporter "trả lời" dùng cho quiz nhập chữ
hỏi (phần tử (so_cau) của [cau_hoi v]) và đợi nếu <(trả lời) = (phần tử (so_cau) của [dap_an v])> thì thay đổi [diem v] thêm [1] nói [Đúng rồi!] trong [1.5] giây phát tiếng [pop v] kết thúc nếu không thì nói (join [Sai! Đáp án: ] (phần tử (so_cau) của [dap_an v])) trong [2] giây kết thúc
📌 Không phân biệt hoa thường
Dùng chữ thường của (trả lời) so với chữ thường của (phần tử …) — người chơi gõ "hà nội" vẫn được tính đúng nếu đáp án là "Hà Nội".
Duyệt hết ngân hàng câu hỏi
Gom logic trên vào vòng lặp — hỏi lần lượt từ câu 1 đến hết:
lặp đến khi <(so_cau) > (tong_cau)> hỏi (phần tử (so_cau) của [cau_hoi v]) và đợi nếu <… so sánh đáp án …> thì … thay đổi [so_cau v] thêm [1] kết thúc nói (join [Hết bài! Điểm: ] (diem)) trong [3] giây
💡 Ghi nhớ
Thêm đợi sau mỗi phản hồi đúng/sai để người chơi kịp đọc trước khi câu tiếp theo xuất hiện.
Chọn câu hỏi ngẫu nhiên
Thay vì hỏi theo thứ tự 1, 2, 3…, có thể rút ngẫu nhiên từ ngân hàng — phù hợp ôn tập nhiều lần không nhớ thứ tự câu.
đặt [so_cau v] thành (số ngẫu nhiên từ (1) đến (độ dài của [cau_hoi v])) hỏi (phần tử (so_cau) của [cau_hoi v]) và đợi
Để không lặp câu trong một lượt chơi: tạo list da_hoi, mỗi lần rút kiểm tra da_hoi có chứa so_cau? — nếu có thì rút lại; sau khi hỏi xong thì thêm so_cau vào da_hoi.
📌 Quiz 10 câu từ kho 50 câu
Biến con_lai = 10. Vòng lặp: rút ngẫu nhiên → hỏi → chấm → giảm con_lai → dừng khi = 0. Ngân hàng lớn, mỗi lần chơi khác nhau.
Quiz trắc nghiệm A/B/C/D
Thay ô nhập chữ, dùng sprite nút cho từng đáp án. Mỗi câu có list lua_chon hoặc lưu 4 đáp án trong list riêng — đáp án đúng vẫn nằm ở dap_an.
Hiện câu hỏi bằng khối nói hoặc sprite chữ.
Hiện 4 nút: A, B, C, D — mỗi nút broadcast chon_A…
So sánh lựa chọn với phần tử (so_cau) của dap_an.
Ẩn tất cả nút trước khi sang câu tiếp.
Nút đáp án dùng "khi nhấn vào nhân vật" kết hợp broadcast